use nalgebra::{DMatrix, DVector};
use std::error::Error;

pub fn solve_linear_system(
    a: DMatrix<f64>,
    b: DVector<f64>,
) -> Result<DVector<f64>, Box<dyn Error>> {
    // 检查矩阵是否为方阵
    if a.nrows() != a.ncols() {
        return Err("Coefficient matrix must be square".into());
    }

    // 检查维度是否匹配
    if a.nrows() != b.len() {
        return Err("Matrix dimensions mismatch".into());
    }

    // 使用QR分解求解Ax=b（比直接求逆更稳定）
    let qr = a.qr();
    let x = qr.solve(&b).ok_or("Matrix is singular, no unique solution")?;

    Ok(x)
}